const replaceTokens = 'ymdhMs'.split('');

/**
 * 格式化字符串输出
 * @param {string} str 格式化字符串
 * @param {number|string} ts 时间戳（秒）
 */
function format(str, ts) {
    if (!str || !ts) return '';
    const d = parseDate(ts);

    let result = str;
    replaceTokens.forEach(t => {
        result = result.replace(`%${t}`, p2(d[t]));
    });

    return result;
}

function parseDate(ts) {
    const d = new Date(ts * 1000);
    return {
        y: d.getFullYear(),     /* 年 */
        m: d.getMonth() + 1,    /* 月 */
        d: d.getDate(),         /* 日 */
        h: d.getHours(),        /* 时 */
        M: d.getMinutes(),      /* 分 */
        s: d.getSeconds(),      /* 秒 */
    }
}

function p2(n) {
    if (n < 10) return '0' + n;
    return '' + n;
}

/**
 * 判断是否同一天
 * @param {number|string} t0 时间戳（秒）
 * @param {number|string} t1 时间戳（秒）
 */
function isSameDay(t0, t1) {
    if (isNaN(t0) || isNaN(t1)) return false;

    if (t0 == t1) return true;

    const d0 = parseDate(t0);
    const d1 = parseDate(t1);

    return d0.y === d1.y
        && d0.m === d1.m
        && d0.d === d1.d;
}

function isLeap(year) {
    return year%4 === 0 && (year%100 !== 0 || year%400 === 0);
}

export default {
    format,
    isSameDay,
    isLeap,
}
